package com.gupaoedu.vip.pattern.proxy.dynamicproxy.cglibproxy;

import net.sf.cglib.core.DebuggingClassWriter;

/** Created by Tom on 2019/3/11. */
public class CglibTest {
  public static void main(String[] args) {

    try {

      // JDK是采用读取接口的信息
      // CGLib覆盖父类方法
      // 目的：都是生成一个新的类，去实现增强代码逻辑的功能

      // JDK Proxy 对于用户而言，必须要有一个接口实现，目标类相对来说复杂
      // CGLib 可以代理任意一个普通的类，没有任何要求

      // CGLib 生成代理逻辑更复杂，效率,调用效率更高，生成一个包含了所有的逻辑的FastClass，不再需要反射调用
      // JDK Proxy生成代理的逻辑简单，执行效率相对要低，每次都要反射动态调用

      // CGLib 有个坑，CGLib不能代理final的方法

      //
      // System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY,"E://cglib_proxy_classes");

      Customer obj = (Customer) new CGlibMeipo().getInstance(Customer.class);
      System.out.println(obj);
      obj.findLove();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
